设计模式学习

1.装饰器模式

这个在我的笔记中有介绍

2.工厂模式

author : liibn
time :2018-11-6
未完成,待更新

3.单例模式

保证一个对象最多只有一个实例存在。如果在有多个创建实例的语句,只有第一次的会真正的创建实例,后面的语句会返回第一次创建的实例。
适合的场景:

  • 某些实例的创建很耗费系统资源。
  • 对安全性要求较高的场景,比如银行的修改余额业务。

python使用装饰器简单的实现一下,这个没有考虑多线程的情况,并不完美。

# 单例模式装饰器
def Singleton(cls):
    _instance = {}

    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
        return _instance[cls]
    return _singleton
    
编写测试类
@Singleton
class A:
    def __init__(self, x):
        self.x = x
        print(self.x)
        

测试写好的装饰器

# 实例化
a_one = A('one')
a_two = A('two')
a_three = A('three')
# 打印实例的地址
print(a_one, a_two, a_three, sep='\n')
# 比较三个引用是否相同
print(a_one is a_two is a_three)

输出如下:

one
<__main__.A object at 0x000001FB17894D68>
<__main__.A object at 0x000001FB17894D68>
<__main__.A object at 0x000001FB17894D68>
True

这里的a_one, a_two, a_three三个引用指向了同一个实例。
如果我们不使用单例模式,那么就会创建三个不同的实例。接下来注释掉@Singleton再次运行代码,输出如下:

one
two
three
<__main__.A object at 0x000001D772F24DA0>
<__main__.A object at 0x000001D772F24EB8>
<__main__.A object at 0x000001D772F2D518>
False

bingo
16 声望5 粉丝